[PHP5] MVC Design Pattern
5 mei 2011In PHP en andere talen kun je werken met zogenaamde design patterns. Dat betekent eigenlijk zoveel als het opbouwen van je code aan de hand van conventies en een vaste structuur. In dit artikel tracht ik toe te lichten hoe MVC het beste in combinatie met PHP kan worden toegepast. Enige ervaring met object georiënteerd programmeren is wel gewenst.
Model View Controller (MVC) in het algemeen
Het principe van MVC is om een applicatie te ontwikkelen waarin de drie belangrijkste elementen in de code gesplitst worden. Met behulp van MVC kun je snel en gemakkelijk een eigen framework in elkaar zetten, dat geheel naar je eigen smaak in te richten is.
Model
Het model is eigenlijk de koppeling tussen de applicatie en de data layer. De data layer kan bijvoorbeeld een (My)SQL database zijn of met tussenkomst van een eigen ontwikkelde data layer die geïntegreerd zit in de applicatie.
View
De view van de applicatie is eigenlijk bedoeld voor het visualiseren van de applicatie. Dat betekent dat alle GUI (Graphical User Interface) elementen via de view gepresenteerd worden.
Controller
De controller is in dezen voor alle applicatielogica. In feite worden de model en view gebruiks om vervolgens het totaalplaatje te combineren tot een daadwerkelijke applicatie. De controller is wat dat betreft het enige aanroeppunt.
NB
Er wordt nooit van buiten het MVC framework direct een functie in de model of view aangeroepen, alleen de controller. Op deze manier dwing je jezelf om redelijk binnen de conventies van het MVC design pattern te blijven. En geloof me, dat komt op de langere termijn de kwaliteit van je code ten goede.
Toepasbaarheid in PHP5
Natuurlijk is de algemene theorie allemaal leuk en aardig, maar hoe passen we dit in praktijk toe in PHP? Allereerst nemen we als uitgangspunt dat een klasse garant staat voor een object. Een object heeft methoden, of eigenlijk gewoon functies. Stel je voor dat een blogapplicatie gaan maken.
class Blog_Model
{
}
class Blog_View
{
}
class Blog_Controller
{
}
?>
Nu willen we bijvoorbeeld een blog toe kunnen voegen. Stel je dat als volgt voor:
class Blog_Model
{
public function add($Data)
{
mysql_query("INSERT INTO ...");
}
}
class Blog_View
{
public function add()
{
$var = "html formulier";
return $var;
}
}
class Blog_Controller
{
if($_POST)
{
$Data = $_POST;
$Data['title'] = addslashes(htmlspecialchars($Data['title']));
echo(Blog_Model::add($Data));
}
else
{
echo(Blog_View::add()
}
}
De volgende stap is het 'generaliseren' van de code. Welke elementen zou je in het vervolg eventueel vaker kunnen gaan gebruiken? Op dit moment hebben wij een functie add()
in de View. Daar kunnen we natuurlijk een algemene naam voor verzinnen, zoals form($Data). Dan kunnen we bij foutieve invoer ook meteen een gevuld formulier weergeven, et cetera.
De basale opzet van deze klassen geven aan dat MVC aanzet tot efficiënter programmeren: we kunnen namelijk voor het aanmaken en aanpassen van een item, hetzelfde formulier gebruiken. Neem nog eens goed een tutorial over object georiënteerd programmeren door en bekijk goed wat de mogelijkheden zijn. Publieke variabelen, verschillende typen functies (public, protected, etc.), het bouwen van een database layer, et cetera. De mogelijkheden zijn legio.
Het kan tevens geen kwaad om de functies van de model, view en controller zo nu en dan een klein beetje minder strikt aan te houden. Ik ben persoonlijk van mening dat een design pattern geen algemeen vaste structuur hoeft te hebben. Er is namelijk geen 'beste manier' om iets te doen. Bouw het pattern om naar je eigen wil en maak daarmee een effectief framework. Alles 'by the book' wil tenslotte niet zeggen dat het ook echt beter is!
De Router
MVC wordt vaak gebruikt in combinatie met een Router klasse. Deze wordt bijvoorbeeld in de index.php uitgevoerd en bepaalt op zijn beurt weer wanneer welke controller aangeroepen moet worden. Zie het als een overkoepelend mechanisme. De router is overigens geen must voor het gebruik van MVC, vaak is het echter wel handig.
Er zijn verschillende namen mogelijk: Router, Parser, Front, Output, et cetera. De naam is nog wel van het minste belang. Kies een naam die logisch is voor jouw applicatie of framework.
Met deze basiskennis zul je een aardig eind vooruit kunnen. De basis die gelegd is in het tweede voorbeeld is perfect om mee verder te werken. Maar nog één laatste tip: denk aan een klasse voor je database connecties. Dat zal een hoop zaken op langere termijn een stuk gemakkelijker maken.
Internet Marketing
Een zoekmachine bouwen #8 - PageRank, Zoeken, etc.Geplaatst op 5 december 2019
Een zoekmachine bouwen #7 - Backlinks & Tabellen
Geplaatst op 22 juli 2018
Een zoekmachine bouwen #6 - Full page cache
Geplaatst op 13 juli 2018
Een zoekmachine bouwen #5 - Een stap verder
Geplaatst op 11 juli 2018
Auteur: Edwin Dijk
TimeTick producten
Urenregistratie software
Gratis urenregistratie software